package leetcode_day._2021._202109._2130;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/9/26 16:11
 * 两整数之和
 * 算法：位运算
 * 分三种情况：
 * 都为 1，一个为 1，都为 0
 */
public class _26_371 {

    public int getSum(int a, int b) {
        int ans = 0, t = 0;
        for (int i = 0; i < 32; i++) {
            int x = (a >> i) & 1, y = (b >> i) & 1;
            if (x == 1 && y == 1) {
                ans |= (t << i);
                t = 1;
            } else if (x == 1 || y == 1) {
                // 前一位为 1，当前位为 0，进位为 1
                // 前一位为 0，当前位为 1，进位为 0
                // 总之进位不变
                ans |= ((1 ^ t) << i);
            } else {
                ans |= (t << i);
                t = 0;
            }
        }
        return ans;
    }

}
